home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / arm / plat-mxc / include / mach / entry-macro.S < prev    next >
Encoding:
Text File  |  2009-09-09  |  2.1 KB  |  83 lines

  1. /*
  2.  *  Copyright (C) 2007 Lennert Buytenhek <buytenh@wantstofly.org>
  3.  *  Copyright 2004-2009 Freescale Semiconductor, Inc. All Rights Reserved.
  4.  */
  5.  
  6. /*
  7.  * This program is free software; you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 2 as
  9.  * published by the Free Software Foundation.
  10.  */
  11.  
  12. #include <mach/hardware.h>
  13.  
  14. #define AVIC_NIMASK    0x04
  15.  
  16.     @ this macro disables fast irq (not implemented)
  17.     .macro    disable_fiq
  18.     .endm
  19.  
  20.     .macro  get_irqnr_preamble, base, tmp
  21. #ifdef CONFIG_MXC_TZIC
  22.     ldr    \base, =TZIC_IO_ADDRESS(TZIC_BASE_ADDR)
  23. #else
  24.     ldr    \base, =AVIC_IO_ADDRESS(AVIC_BASE_ADDR)
  25. #ifdef CONFIG_MXC_IRQ_PRIOR
  26.     ldr    r4, [\base, #AVIC_NIMASK]
  27. #endif
  28. #endif
  29.     .endm
  30.  
  31.     .macro  arch_ret_to_user, tmp1, tmp2
  32.     .endm
  33.  
  34.     @ this macro checks which interrupt occured
  35.     @ and returns its number in irqnr
  36.     @ and returns if an interrupt occured in irqstat
  37.     .macro    get_irqnr_and_base, irqnr, irqstat, base, tmp
  38. #ifdef CONFIG_MXC_TZIC
  39.     @ Load offset & priority of the highest priority
  40.     @ interrupt pending.
  41.         @ 0xD80 is HIPND0 register
  42.         ldr     \irqnr, =0
  43.         ldr     \irqstat, =0x0D80
  44. 1000:
  45.         ldr     \tmp,   [\irqstat, \base]
  46.         cmp     \tmp, #0
  47.         bne     1001f
  48.         addeq   \irqnr, \irqnr, #32
  49.         addeq   \irqstat, \irqstat, #4
  50.         cmp     \irqnr, #128
  51.         blo     1000b
  52.         b       2001f
  53. 1001:   ldr     \irqstat, =1
  54. 1002:   tst     \tmp, \irqstat
  55.         bne     2002f
  56.         movs    \tmp, \tmp, lsr #1
  57.         addne   \irqnr, \irqnr, #1
  58.         bne     1002b
  59. 2001:
  60.         ldr  \irqnr, =0
  61. 2002:
  62.         movs \irqnr, \irqnr
  63. #else
  64.     @ Load offset & priority of the highest priority
  65.     @ interrupt pending from AVIC_NIVECSR
  66.     ldr    \irqstat, [\base, #0x40]
  67.     @ Shift to get the decoded IRQ number, using ASR so
  68.     @ 'no interrupt pending' becomes 0xffffffff
  69.     mov    \irqnr, \irqstat, asr #16
  70.     @ set zero flag if IRQ + 1 == 0
  71.     adds    \tmp, \irqnr, #1
  72. #ifdef CONFIG_MXC_IRQ_PRIOR
  73.     bicne    \tmp, \irqstat, #0xFFFFFFE0
  74.     strne    \tmp, [\base, #AVIC_NIMASK]
  75.     streq    r4, [\base, #AVIC_NIMASK]
  76. #endif
  77. #endif
  78.     .endm
  79.  
  80.     @ irq priority table (not used)
  81.     .macro    irq_prio_table
  82.     .endm
  83.